package com.lxk.concurrency.example.singleton;

import com.lxk.concurrency.annoations.Recommend;
import com.lxk.concurrency.annoations.ThreadSafe;

/**
 * @Description 使用枚举模式初始化，最安全
 *
 * @author 堆堆堆
 * @date 2018年5月25日 下午4:34:46
 */
@ThreadSafe
@Recommend
public class SingletonExample7 {

	// 私有构造函数
	private SingletonExample7() {
	}

	public static SingletonExample7 getInstance() {
		return Singleton.INSTANCE.getInstance();
	}

	private enum Singleton {

		INSTANCE;

		private SingletonExample7 singleton;

		// JVM 保证这个方法绝对只被调用一次
		Singleton() {
			singleton = new SingletonExample7();
		}

		public SingletonExample7 getInstance() {
			return singleton;
		}
	}
}
